package com.alibaba.citrus.cr.unified.inventory.utils;

import org.apache.commons.lang3.StringUtils;

import java.math.BigDecimal;
import java.util.Optional;

/**
 * @description:
 * @author: yuhw
 * @date: 2024年03月20日 10:54
 **/
public class NumberUtil {

    public static String subtract(String source,String target){
        BigDecimal sourceBigDecimal = getDefaultOrBigDecimal(source);
        BigDecimal targetBigDecimal = getDefaultOrBigDecimal(target);
        return sourceBigDecimal.subtract(targetBigDecimal).stripTrailingZeros().toPlainString();
    }

    public static boolean isNumeric(String value){
        try {
            new BigDecimal(value);
            return true;
        }catch (Throwable e){
            return false;
        }
    }

    public static int compare(String source,String target){
        return getDefaultOrBigDecimal(source).compareTo(getDefaultOrBigDecimal(target));
    }
    public static BigDecimal getDefaultOrBigDecimal(String value){
        return Optional.ofNullable(value).filter(StringUtils::isNotBlank).map(String::trim).map(BigDecimal::new).orElse(BigDecimal.ZERO);
    }

    public static String defaultStripTrailingZeros(String value){
        return getDefaultOrBigDecimal(value).stripTrailingZeros().toPlainString();
    }

    public static String stripTrailingZeros(String value){
        return StringUtils.isBlank(value) ? null :
                getDefaultOrBigDecimal(value).stripTrailingZeros().toPlainString();
    }

    public static boolean isInteger(String s) {
        if (StringUtils.isBlank(s)) {
            return false;
        } else {
            try {
                Integer.parseInt(s);
                return true;
            } catch (NumberFormatException var2) {
                return false;
            }
        }
    }

    public static String multiply(String source, String target){
        return getDefaultOrBigDecimal(source).multiply(getDefaultOrBigDecimal(target)).stripTrailingZeros().toPlainString();
    }
}
